package LeetCode;

/**
 * 剑指 Offer 03. 数组中重复的数字
 * @author 豆包LU
 * @date 2023/4/12 10:24
 */
class Offer03 {
   /* public int findRepeatNumber(int[] nums) {
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            // 当前数字 nums[i] 不在正确的位置上
            while (nums[i] != i) {
                // 如果当前位置上的数字和它应该在的位置上的数字相等，则说明找到了重复数字
                if (nums[i] == nums[nums[i]]) {
                    return nums[i];
                }
                // 将当前数字交换到它应该在的位置上
                int temp = nums[i];
                nums[i] = nums[temp];
                nums[temp] = temp;
            }
        }
        return -1; // 若数组中没有重复数字，返回-1
    }*/
   public int findRepeatNumber(int[] nums) {
       int i = 0;
       while(i < nums.length) {
           if(nums[i] == i) {
               i++;
               continue;
           }
           if(nums[nums[i]] == nums[i]) {
               return nums[i];
           }
           int tmp = nums[i];
           nums[i] = nums[tmp];
           nums[tmp] = tmp;
       }
       return -1;
   }
}